package com.ssy.lingxi.product.service.price;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.product.api.model.request.GoodsQueryRequest;
import com.ssy.lingxi.product.api.model.request.price.*;
import com.ssy.lingxi.product.api.model.response.commodity.GoodsIdAndFirstCategoryIdResponse;
import com.ssy.lingxi.product.api.model.response.price.GoodsPriceHistoryResponse;
import com.ssy.lingxi.product.api.model.response.price.GoodsPriceResponse;
import com.ssy.lingxi.product.entity.Goods;
import com.ssy.lingxi.product.entity.price.GoodsPrice;
import com.ssy.lingxi.product.entity.price.GoodsPriceHistory;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 价格管理类
 * @author lxc
 * @version 2.0.0
 * @date 2022/3/25
 */
public interface IPriceManagementService {

    /**
     * 查询货品价格列表
     * @param pageVO 分页实体
     * @param goodsQueryRequest 货品价格查询类
     */
    Page<GoodsPrice> getGoodsPriceList(UserLoginCacheDTO sysUser, PageVO pageVO, GoodsPriceQueryRequest goodsQueryRequest);

    /**
     * 查询物料价格历史列表 - 查看单个物料历史价格详情
     * @param sysUser 登录信息
     * @param pageVO 分页对象
     * @param queryRequest 查询对象
     */
    Wrapper<PageData<GoodsPriceHistory>> getGoodsPriceHistory(UserLoginCacheDTO sysUser, PageVO pageVO, PriceHistoryQueryRequest queryRequest);

    /**
     * 物料价格历史列表 - 新增市场价
     * @param addRequest 价格信息
     */
    Wrapper<Void> AddGoodsPrice(PriceAddRequest addRequest);

    /**
     * 物料新增、修改时，同步更新价格库
     * 更新物料价格信息
     * @param updateRequest 价格信息
     */
    void updateGoodsPrice(PriceUpdateRequest updateRequest);

    /**
     * 物料删除时，同步更新价格库
     * 更新物料价格信息
     * @param deleteRequest 价格信息
     */
    void deleteGoodsPrice(PriceDeleteRequest deleteRequest);

    /**
     * 合同物料信息同步更新
     * @param request 物料价格信息
     */
    Wrapper<Void> changeContractGoodsPrice(ContractPriceRequest request);

    /**
     * 订单物料信息同步更新
     * @param request 物料价格信息
     */
    Wrapper<Void> changeOrderGoodsPrice(OrderPriceRequest request);
}
